// Copyright Epic Games, Inc. All Rights Reserved.

#pragma once

#include "CommonActivatableWidget.h"
#include "GameplayTagContainer.h"

#include "LyraControllerDisconnectedScreen.generated.h"

class UHorizontalBox;
class UObject;
class UCommonButtonBase;
struct FPlatformUserSelectionCompleteParams;

/**
 * 当用户的所有控制器断开连接时需要重新连接才能继续游戏时显示的屏幕
 */
UCLASS(Abstract, BlueprintType, Blueprintable)
class ULyraControllerDisconnectedScreen : public UCommonActivatableWidget
{
	GENERATED_BODY()
public:
	ULyraControllerDisconnectedScreen(const FObjectInitializer& ObjectInitializer);
	
protected:
	/** 当控件激活时调用 */
	virtual void NativeOnActivated() override;

	/** 处理切换用户按钮点击事件 */
	virtual void HandleChangeUserClicked();

	/**
	 * 当用户选择切换平台用户后调用
	 * @param Params 用户选择完成参数
	 */
	virtual void HandleChangeUserCompleted(const FPlatformUserSelectionCompleteParams& Params);

	/**
	 * 返回是否应显示切换用户按钮
	 * 这将检查ICommonUIModule的平台特性标签
	 */
	virtual bool ShouldDisplayChangeUserButton() const;

	/**
	 * 满足时将显示"切换用户"按钮所需的平台特性
	 * 允许玩家更改当前映射到输入设备的已登录用户
	 */
	UPROPERTY(EditDefaultsOnly)
	FGameplayTagContainer PlatformSupportsUserChangeTags; //支持用户切换的平台特性标签容器

	/**
	 * 具有"严格"用户配对要求的平台可能希望允许您直接从游戏UI更改用户
	 * 这些平台在Common UI中被标记为"Platform.Trait.Input.HasStrictControllerPairing"
	 *
	 * 如果您所在的平台没有该平台特性，则此HBox将被设置为不可见
	 */
	UPROPERTY(meta = (BindWidget))
	TObjectPtr<UHorizontalBox> HBox_SwitchUser; //切换用户水平框

	/**
	* 用于在具有严格用户配对要求的平台上处理更改用户的按钮
	* 
	* @see HBox_SwitchUser
	*/
	UPROPERTY(meta = (BindWidget))
	TObjectPtr<UCommonButtonBase> Button_ChangeUser; //切换用户按钮
};